import {
  BwCustomComEmitParamDataTypeEnum,
  BwCustomComNodeEventCallbackParamFromTypeEnum,
} from './enum'

/** 当前自定义组件事件信息模型 */
export interface BwCustomComEmitInfoModel {
  /** 事件标识 */
  key: string

  /** 事件名称 */
  name?: string

  /** 绑定事件 */
  isModel?: boolean

  /** 事件参数 */
  params?: Array<BwCustomComEmitParmsModel>

  /** 事件备注 */
  desc?: string
}

/** 当前自定义组件事件参数信息模型 */
export interface BwCustomComEmitParmsModel {
  /** 参数标识 */
  paramKey: string

  /** 参数名称 */
  paramName: string

  /** 参数数据类型 */
  paramDataType: BwCustomComEmitParamDataTypeEnum

  /** 参数备注 */
  remark?: string
}

/** 当前自定义组件节点事件回调信息模型 */
export interface BwCustomComNodeEventInfoModel {
  /** 事件名称 */
  eventName: string

  /** 事件标识 */
  eventCode: string

  /** 事件参数集合 */
  eventParams?: Array<BwCustomComEmitParmsModel>

  /** 回调方法参数 */
  callbackFunParams?: Array<BwCustomComNodeEventCallbackParamInfoModel>

  /** 回调方法信息 */
  callbackFun?: string
}

/** 当前自定义组件节点事件回调方法参数信息模型 */
export interface BwCustomComNodeEventCallbackParamInfoModel {
  /** 参数标识 */
  paramCode: string

  /** 参数名称 */
  paramName: string

  /** 参数值来源 */
  paramFrom: BwCustomComNodeEventCallbackParamFromTypeEnum

  /** 参数值数据类型 */
  paramDataType: BwCustomComEmitParamDataTypeEnum

  /** 常量值 */
  constValue?: string

  /** 事件参数名称 */
  eventParamName?: string

  /** 组件变量名称 */
  comVarName?: string

  /** 组件外放属性名称 */
  comPropsName?: string

  /** 组件节点循环名称 */
  nodeForVarName?: string

  /** 插槽变量名称 */
  slotVarName?: string

  /** js 表达式逻辑体 */
  jsExpBodyLogic?: string | null

  /** js 表达式逻辑体入参 */
  jsExpParams?: Array<BwCustomComNodeEvenJsExpParamModel> | null
}

/** 当前自定义组件属性js 表达式入参模型 */
export interface BwCustomComNodeEvenJsExpParamModel {
  /** 参数标识 */
  key: string

  /** 参数名称 */
  name: string | null

  /** 参数是否必填 */
  isRequire: boolean | null

  /** 参数数据类型 */
  paramDataType: Array<BwCustomComEmitParamDataTypeEnum> | null

  /** 参数默认值 */
  defaultValue?: any | null

  /** 数默认值数据类型 */
  defaultValueDataType?: BwCustomComEmitParamDataTypeEnum | null

  /** 参数备注 */
  remark?: string | null
}
